/*******************************************
  Jose Andres Lara Vecino

  Author       : $Author: cainlara@gmail.com $
  Last CheckIn : $Date: 2012-08-22 18:35:06 +0000 (Wed, 22 Aug 2012) $
  Revision     : $Revision: 100 $
*******************************************/

package gui.proyecto;

import frente.Proyecto;
import generico.GenericoDialogo;
import gui.BotonesPanel;

import java.awt.BorderLayout;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import mensaje.Mensaje;
import utilidad.IPropiedades;

/**
 * Dialogo de edicion de <code>Proyecto</code>.
 * 
 * @author jose.lara 07.06.2012
 */
public class EditarProyectoDialogo extends GenericoDialogo {
    private static final long serialVersionUID = -5078097186285800569L;
    
    private EditarProyectoPanel panel   = null;
    private BotonesPanel botonesPanel   = null;
    private Proyecto proyecto           = null;
    
    public EditarProyectoDialogo() {
        super();
        
        botonesPanel = new BotonesPanel(BotonesPanel.BOTONES_GUARDAR_CANCELAR_GUARDAR_CERRAR);
        botonesPanel.addPropertyChangeListener(new PropertyChangeListener() {
            
            @Override
            public void propertyChange(PropertyChangeEvent evt) {
                if(evt.getPropertyName().equals(IPropiedades.BOTON_PRESIONADO)) {
                    tratarBotonPresionado((Integer) evt.getNewValue());
                }
            }
        });
        setModal(true);
        obtenerTitulo();
        add(getPanel(), BorderLayout.CENTER);
        add(botonesPanel, BorderLayout.SOUTH);
        pack();
    }
    
    private Proyecto getProyecto() {
        return proyecto;
    }

    public void setValoresProyecto(Proyecto proyecto) {
        this.proyecto = proyecto;
        obtenerTitulo();
        getPanel().setValoresProyecto(proyecto);
        actualizarBotones();
    }
    
    private EditarProyectoPanel getPanel() {
        if(panel == null) {
            panel = new EditarProyectoPanel();
            panel.addPropertyChangeListener(new PropertyChangeListener() {
                @Override
                public void propertyChange(PropertyChangeEvent evt) {
                    if(evt.getPropertyName().equals(IPropiedades.CAMBIO_DATOS)) {
                        actualizarBotones();
                    }
                }
            });
        }
        
        return panel;
    }
    
    private BotonesPanel getBotonesPanel() {
        return botonesPanel;
    }
    
    private void tratarBotonPresionado(int botonPresionado) {
        switch(botonPresionado) {
            case BotonesPanel.GUARDAR:
                guardar();
                break;
            case BotonesPanel.CANCELAR:
                cerrarDialogo();
                break;
            case BotonesPanel.GUARDAR_CERRAR:
                guardarCerrar();
                break;
            default:
                break;
        }
    }
    
    private void obtenerTitulo() {
        String titulo = null;
        
        if(getProyecto() != null) {
            titulo = Mensaje.getMensaje("DIALOGO_PROYECTO-EDITAR_TITULO", getProyecto().getNombre());
        }
        else {
            titulo = Mensaje.getMensaje("DIALOGO_PROYECTO-NUEVO_TITULO");
        }
        
        setTitle(titulo);
    }
    
    @Override
    protected void guardar() {
        getPanel().getControlador().guardar(getProyecto());
        solicitarActualizacion();
    }
    
    private void solicitarActualizacion() {
        firePropertyChange(IPropiedades.ACTUALIZAR, false, true);
    }
    
    private void actualizarBotones() {
        getBotonesPanel().getGuardarBoton().setEnabled(getPanel().getControlador().puedeGuardar());
        getBotonesPanel().getGuardarCerrarBoton().setEnabled(getPanel().getControlador().puedeGuardar());
    }
}